package com.hkrt.demo

import android.app.Application
import com.alibaba.android.arouter.launcher.ARouter
import com.luseen.logger.LogType
import com.luseen.logger.Logger
import com.squareup.leakcanary.LeakCanary
import com.hkrt.demo.di.component.ApplicationComponent
import com.hkrt.demo.di.component.DaggerApplicationComponent
import com.hkrt.demo.di.module.ApplicationModule
import com.hkrt.demo.presentation.utils.extensions.unSafeLazy

/**
* @author  Chenjinguang
* @date 29.07.2017.
*/
class App : Application() {

    val applicationComponent: ApplicationComponent by unSafeLazy {
        DaggerApplicationComponent.builder()
                .applicationModule(ApplicationModule(this))
                .build()
    }

    companion object {
        lateinit var instance: App
    }

    override fun onCreate() {
        super.onCreate()
        if (LeakCanary.isInAnalyzerProcess(this)) return
        LeakCanary.install(this)
        instance = this
        initLogger()
        initRouter()
    }

    private fun initRouter() {
        // 这两行必须写在init之前，否则这些配置在init过程中将无效
        if (BuildConfig.DEBUG) {
            // 打印日志
            ARouter.openLog()
            // 开启调试模式(如果在InstantRun模式下运行，必须开启调试模式！线上版本需要关闭,否则有安全风险)
            ARouter.openDebug()
        }
        // 尽可能早，推荐在Application中初始化
        ARouter.init(this)
    }

    private fun initLogger() {
        Logger.Builder()
                .isLoggable(BuildConfig.DEBUG)
                .logType(LogType.ERROR)
                .tag("HKRT")
                .setIsKotlin(true)
                .build()
    }
}
